查看原文
其他

TensorFlow 数据集介绍

Google TensorFlow 2021-07-27


公共数据集推动了机器学习研究的飞速发展(h/t 吴恩达),但要将这些数据集导入机器学习管道,仍非易事。每个数据集的源格式和复杂性都不尽相同,编写一次性脚本,用于下载和准备所使用的数据集,这是每位研究人员都有过的切身之痛。但现在,这些都已成为过去。


今天,我们很高兴为大家介绍 TensorFlow 数据集(GitHub),它将以 tf.data.Datasets 和 NumPy 数组的形式开放公共研究数据集。该数据集能够完成所有琐碎的工作,比如抓取源数据并将其准备为磁盘上的通用格式。此外,它还可以使用 tf.data API 来构建高性能输入管道,这些管道支持 TensorFlow 2.0,并可与 tf.keras 模型一同使用。我们推出了 29 个热门研究数据集,比如 MNIST、Street View House Numbers、包含 10 亿单词的语言模型基准以及大型影评数据集等。在未来几个月,我们还将推出更多数据集。希望您可以加入并 贡献自己的数据集(https://www.tensorflow.org/datasets/add_dataset)

注:GitHub 链接

https://github.com/tensorflow/datasets

热门研究数据集 链接

https://www.tensorflow.org/datasets/datasets



tl;dr

# Install: pip install tensorflow-datasets
import tensorflow_datasets as tfds
mnist_data = tfds.load("mnist")
mnist_train, mnist_test = mnist_data["train"], mnist_data["test"]
assert isinstance(mnist_train, tf.data.Dataset)


在 Colab 笔记本中试用 tfds。


tfds.load 和 DatasetBuilder

注:tfds.load 链接

https://www.tensorflow.org/datasets/api_docs/python/tfds/load

DatasetBuilder 链接

https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder


每个数据集都以 DatasetBuilder 的形式开放,它会告诉您:

  • 从何处下载数据,如何提取数据并将其写成标准格式 (DatasetBuilder.download_and_prepare https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder#download_and_prepare)

  • 如何从磁盘加载数据集(DatasetBuilder.as_dataset https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder#as_dataset)

  • 以及关于数据集的所有信息,如所有特征的名称、类型和形状、每个拆分中的记录数、源网址、数据集或相关论文的引用等。(DatasetBuilder.info https://www.tensorflow.org/datasets/api_docs/python/tfds/core/DatasetBuilder#info)


您可以直接对所有 DatasetBuilder 进行实例化,或使用 tfds.builder 通过字符串获取 DatasetBuilder:

import tensorflow_datasets as tfds

# Fetch the dataset directly
mnist = tfds.image.MNIST()
# or by string name
mnist = tfds.builder('mnist')

# Describe the dataset with DatasetInfo
assert mnist.info.features['image'].shape == (28, 28, 1)
assert mnist.info.features['label'].num_classes == 10
assert mnist.info.splits['train'].num_examples == 60000

# Download the data, prepare it, and write it to disk
mnist.download_and_prepare()

# Load data from disk as tf.data.Datasets
datasets = mnist.as_dataset()
train_dataset, test_dataset = datasets['train'], datasets['test']
assert isinstance(train_dataset, tf.data.Dataset)

# And convert the Dataset to NumPy arrays if you'd like
for example in tfds.as_numpy(train_dataset):
 image, label = example['image'], example['label']
 assert isinstance(image, np.array)


as_dataset() 接受一个 batch_size 参数,该参数会提供批量示例,而非每次提供一个示例。对于能装入内存的小型数据集,您可以通过传递 batch_size=-1 即刻获取整个数据集,并将其作为 tf.Tensor。使用 tfds.as_numpy() 可将所有 tf.data.Datasets 轻松转换为 NumPy 数组的可迭代对象。


为方便起见,您可以使用 tfds.load 执行以上所有操作。tfds.load 会按名称获取 DatasetBuilder,调用 download_and_prepare() 和 as_dataset()。

import tensorflow_datasets as tfds

datasets = tfds.load("mnist")
train_dataset, test_dataset = datasets["train"], datasets["test"]
assert isinstance(train_dataset, tf.data.Dataset)


您也可通过传递 with_info=True,轻松从 tfds.load 中获取 DatasetInfo 对象。如需了解所有选项,请参阅 API 文档(https://www.tensorflow.org/datasets/api_docs/python/tfds/load)



数据集版本控制

每个数据集均采用版本控制 (builder.info.version),因此,您尽可放心,数据不会随意变化,结果也是可重现的。目前,我们保证,如果数据发生变化,我们将增加版本。


请注意,针对同一版本,我们保证数据的值和拆分完全相同,但目前并不保证其记录按序排列。



数据集配置

对于具有不同变体的数据集,可使用已命名的 BuilderConfigs 配置。例如,针对输入文本,大型影评数据集 (tfds.text.IMDBReviews) 可能会有不同编码(如纯文本、字符编码或子词编码)。内置配置会随数据集文档一同列出,您可以通过字符串对其进行寻址,也可将其传入自己的配置。

# See the built-in configs
configs = tfds.text.IMDBReviews.builder_configs
assert "bytes" in configs

# Address a built-in config with tfds.builder
imdb = tfds.builder("imdb_reviews/bytes")
# or when constructing the builder directly
imdb = tfds.text.IMDBReviews(config="bytes")
# or use your own custom configuration
my_encoder = tfds.features.text.ByteTextEncoder(additional_tokens=['hello'])
my_config = tfds.text.IMDBReviewsConfig(
   name="my_config",
   version="1.0.0",
   text_encoder_config=tfds.features.text.TextEncoderConfig(encoder=my_encoder),
)
imdb = tfds.text.IMDBReviews(config=my_config)


请参阅添加数据集文档中的 数据集配置部分(https://www.tensorflow.org/datasets/add_dataset#dataset_configuration)



文本数据集和词汇表

由于编码和词汇文件不同,文本数据集通常不易处理,但 tensorflow-datasets 将大大简化这一过程。该过程附带许多文本任务,并且包括三种 TextEncoder,全部支持 Unicode:

  • ByteTextEncoder 用于字节或字符集编码

  • TokenTextEncoder 用于基于词汇文件的字级编码

  • SubwordTextEncoder 用于子字级编码(和针对特定文本语料库创建子词词汇表的功能),并能实现字节级回退,因而其完全可逆。例如,我们可将 “hello world” 拆分为 [“he”,“llo”,“wor”,“ld”],然后对其进行整数编码。子字是字级编码和字节级编码之间的理想媒介,在一些自然语言研究项目中很受欢迎


您可以通过 DatasetInfo 访问编码器及其词汇表大小:

imdb = tfds.builder("imdb_reviews/subwords8k")

# Get the TextEncoder from DatasetInfo
encoder = imdb.info.features["text"].encoder
assert isinstance(encoder, tfds.features.text.SubwordTextEncoder)

# Encode, decode
ids = encoder.encode("Hello world")
assert encoder.decode(ids) == "Hello world"

# Get the vocabulary size
vocab_size = encoder.vocab_size


未来,TensorFlow 和 TensorFlow 数据集将进一步改进文本支持。



入门指南

我们的 文档网站 是 tensorflow-datasets 的最佳入门场所。以下是一些补充入门指南:

  • 数据集页面

    (https://www.tensorflow.org/datasets/datasets)

  • API 文档

    (https://www.tensorflow.org/datasets/api_docs/python/tfds)

  • Colab 教程

    (https://colab.research.google.com/github/tensorflow/datasets/blob/master/docs/overview.ipynb)

  • 如何添加数据集

    (https://www.tensorflow.org/datasets/add_dataset)

  • GitHub

    (https://github.com/tensorflow/datasets)

注:文档网站 链接

https://www.tensorflow.org/datasets


我们将在未来几个月添加更多数据集,同时诚邀整个社区一起加入。您可以打开 GitHub Issue 以请求数据集、对应添加文本的数据集进行投票、讨论实现细节或寻求帮助。非常欢迎您提交 Pull Request!您可以为社区贡献热门数据集,也可将自己的数据(如有)贡献给 TFDS,使其名声大噪!

注:GitHub Issue 链接

https://github.com/tensorflow/datasets/issues


轻松获取数据已成现实,愉快的建模之旅也即将起航!



致谢

感谢牛津大学的 Stefan Webb 允许我们使用 tensorflow-datasets PyPI 的名称。谢谢 Stefan!


同时感谢 Lukasz Kaiser 和 Tensor2Tensor 项目对 tensorflow/datasets 的启发和指导。谢谢 Lukasz!T2T 不久将迁移至 tensorflow/datasets。



更多 AI 相关阅读:



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存